const array1 = ['a', 'b', 'c'];
const str1 = "123";
const iterator1 = array1[Symbol.iterator]();
const iterator2 = array1.values()

console.log(iterator1) // Object [Array Iterator] {}
console.log(iterator2) // Object [Array Iterator] {}

// 注：values()和Symbol.iterator返回的结果相同，都是一个可迭代对象

for (const value of iterator1) {
  console.log(value);
}

for (const value of iterator2) {
  console.log(value);
}

console.log(str1[Symbol.iterator]()) // Object [String Iterator] {}
console.log(str1.values ? str1.values() : Array.of(str1).values()) // Object [Array Iterator] {}

// 封装iterable工具
function logIterable(it) {
    if (typeof it[Symbol.iterator] !== "function") {
      console.log(it, "不可迭代。");
      return;
    }
    for (const letter of it) {
      console.log(letter);
    }
  }
  
  // 数组
  logIterable(["a", "b", "c"]);
  // a
  // b
  // c
  
  // 字符串
  logIterable("abc");
  // a
  // b
  // c
  
  // 数值
  logIterable(123);
  // 123 不可迭代
  